--- title: "trie变形 存二进制位" created: 2025-11-28 tags: - 算法 --- # trie变形 存二进制位 ## 题目 [最大异或对](https://www.acwing.com/problem/content/145/) ![[image-26f3af98.png]] ## 思路分析 ![[image-44dfb024.png]] ## 代码实现 ```cpp #include using namespace std; const int N=100010,M=3100010;//一个int最多31位 所以结点最大为31*N int a[N],son[M][2];//孩子顶多两个 0或1 int idx; void insert(int x) { int p=0;//思路一样 从根节点开始 for(int i=30;i>=0;i--) { int u=x>>i&1;//由左到右取每位 if(!son[p][u]) son[p][u]=++idx; p=son[p][u]; } } int search(int x) { int p=0,res=0; for(int i=30;i>=0;i--) { int u=x>>i&1; if(son[p][!u])//理想情况存在 { res=res*2+1;//左移一位且该位为1 p=son[p][!u]; } else { res=res*2+0;//左移一位且该位为0 p=son[p][u]; } } return res; } int main() { int n; cin>>n; for(int i=0;i